package com.youlai.system.plugin.easyexcel;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.youlai.system.model.query.CarAdPageQuery;
import com.youlai.system.model.vo.CarAdExportVO;
import com.youlai.system.model.vo.CarAdImportVO;
import com.youlai.system.service.CarAdService;
import lombok.extern.slf4j.Slf4j;

/**
 * 用户导入监听器
 * <p>
 *
 * @author haoxr
 * @since 2024/2/7 20:49
 */
@Slf4j
public class AdImportListener extends MyAnalysisEventListener<CarAdImportVO> {


    // 有效条数
    private int validCount;

    // 无效条数
    private int invalidCount;

    // 导入返回信息
    StringBuilder msg = new StringBuilder();

    private final CarAdService carAdService;


    public AdImportListener() {
        this.carAdService = SpringUtil.getBean(CarAdService.class);
    }

    /**
     * 每一条数据解析都会来调用
     * <p>
     * 1. 数据校验；全字段校验
     * 2. 数据持久化；
     *
     * @param analysisContext
     */
    @Override
    public void invoke(CarAdImportVO carAdImportVO, AnalysisContext analysisContext) {
        log.info("解析到一条用户数据:{}", JSONUtil.toJsonStr(carAdImportVO));
        // 校验数据
        StringBuilder validationMsg = new StringBuilder();

        Integer userId = carAdImportVO.getUserId();
        if (userId==null) {
            validationMsg.append("用户ID为空；");
        } else {
            CarAdPageQuery queryParams=new CarAdPageQuery();
//            queryParams.setKeywords(username);
//            long count = carAdService.getAdPage(queryParams).getTotal();
//            if (count > 0) {
//                validationMsg.append("用户名已存在；");
//            }
        }

        if (validationMsg.isEmpty()) {
            boolean saveResult = carAdService.saveAdImport(carAdImportVO);
            if (saveResult) {
                validCount++;
            } else {
                invalidCount++;
                msg.append("第").append(validCount + invalidCount).append("行数据保存失败；<br/>");
            }
        } else {
            invalidCount++;
            msg.append("第" + (validCount + invalidCount) + "行数据校验失败：").append(validationMsg + "<br/>");
        }
    }


    /**
     * 所有数据解析完成会来调用
     *
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }


    @Override
    public String getMsg() {
        // 总结信息
        String summaryMsg = StrUtil.format("导入用户结束：成功{}条，失败{}条；<br/>{}", validCount, invalidCount, msg);
        return summaryMsg;
    }
}
